package com.example.forum.dao;

import com.example.forum.model.SystemConfig;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 系统配置数据访问接口
 */
@Mapper
public interface SystemConfigMapper {
    /**
     * 插入新配置项
     * @param record 配置项记录
     * @return 影响行数
     */
    int insert(SystemConfig record);

    /**
     * 选择性插入配置项
     * @param record 配置项记录
     * @return 影响行数
     */
    int insertSelective(SystemConfig record);

    /**
     * 根据主键查询配置项
     * @param id 配置项ID
     * @return 配置项
     */
    SystemConfig selectByPrimaryKey(Long id);

    /**
     * 根据配置项键名查询配置项
     * @param configKey 配置项键名
     * @return 配置项
     */
    SystemConfig selectByConfigKey(@Param("configKey") String configKey);

    /**
     * 根据分组名查询配置项列表
     * @param groupName 分组名
     * @return 配置项列表
     */
    List<SystemConfig> selectByGroupName(@Param("groupName") String groupName);

    /**
     * 查询所有配置项
     * @return 所有配置项列表
     */
    List<SystemConfig> selectAll();

    /**
     * 根据主键选择性更新配置项
     * @param record 配置项记录
     * @return 影响行数
     */
    int updateByPrimaryKeySelective(SystemConfig record);

    /**
     * 根据主键更新配置项
     * @param record 配置项记录
     * @return 影响行数
     */
    int updateByPrimaryKey(SystemConfig record);
    
    /**
     * 根据配置项键名更新配置项值
     * @param configKey 配置项键名
     * @param configValue 配置项值
     * @return 影响行数
     */
    int updateConfigValueByKey(@Param("configKey") String configKey, @Param("configValue") String configValue);
    
    /**
     * 批量更新配置项
     * @param configs 配置项列表
     * @return 影响行数
     */
    int batchUpdate(@Param("configs") List<SystemConfig> configs);
} 